60806040526000600960006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162001f1738038062001f178339818101604052810190620000529190620003a1565b6000620000646200024960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35083600590805190602001906200011a92919062000251565b5082600690805190602001906200013392919062000251565b5081600760006101000a81548160ff021916908360ff16021790555081600a6200015e91906200052f565b816200016b91906200066c565b60088190555060085460016000620001886200024960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001d66200024960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000237919062000450565b60405180910390a3505050506200081e565b600033905090565b8280546200025f906200071a565b90600052602060002090601f016020900481019282620002835760008555620002cf565b82601f106200029e57805160ff1916838001178555620002cf565b82800160010185558215620002cf579182015b82811115620002ce578251825591602001919060010190620002b1565b5b509050620002de9190620002e2565b5090565b5b80821115620002fd576000816000905550600101620002e3565b5090565b6000620003186200031284620004a1565b6200046d565b9050828152602081018484840111156200033157600080fd5b6200033e848285620006e4565b509392505050565b600082601f8301126200035857600080fd5b81516200036a84826020860162000301565b91505092915050565b6000815190506200038481620007ea565b92915050565b6000815190506200039b8162000804565b92915050565b60008060008060808587031215620003b857600080fd5b600085015167ffffffffffffffff811115620003d357600080fd5b620003e18782880162000346565b945050602085015167ffffffffffffffff811115620003ff57600080fd5b6200040d8782880162000346565b935050604062000420878288016200038a565b9250506060620004338782880162000373565b91505092959194509250565b6200044a81620006cd565b82525050565b60006020820190506200046760008301846200043f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715620004975762000496620007ae565b5b8060405250919050565b600067ffffffffffffffff821115620004bf57620004be620007ae565b5b601f19601f8301169050602081019050919050565b6000808291508390505b60018511156200052657808604811115620004fe57620004fd62000750565b5b60018516156200050e5780820291505b80810290506200051e85620007dd565b9450620004de565b94509492505050565b60006200053c82620006cd565b91506200054983620006d7565b9250620005787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000580565b905092915050565b60008262000592576001905062000665565b81620005a2576000905062000665565b8160018114620005bb5760028114620005c657620005fc565b600191505062000665565b60ff841115620005db57620005da62000750565b5b8360020a915084821115620005f557620005f462000750565b5b5062000665565b5060208310610133831016604e8410600b8410161715620006365782820a90508381111562000630576200062f62000750565b5b62000665565b620006458484846001620004d4565b925090508184048111156200065f576200065e62000750565b5b81810290505b9392505050565b60006200067982620006cd565b91506200068683620006cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620006c257620006c162000750565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b60005b8381101562000704578082015181840152602081019050620006e7565b8381111562000714576000848401525b50505050565b600060028204905060018216806200073357607f821691505b602082108114156200074a57620007496200077f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008160011c9050919050565b620007f581620006cd565b81146200080157600080fd5b50565b6200080f81620006d7565b81146200081b57600080fd5b50565b6116e9806200082e6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638a8c523c116100a2578063b61f2f4811610071578063b61f2f48146102ad578063dd62ed3e146102c9578063e3eaeb5c146102f9578063eb6308b114610329578063f582b8e31461034557610116565b80638a8c523c146102375780638da5cb5b1461024157806395d89b411461025f578063a9059cbb1461027d57610116565b806323b872dd116100e957806323b872dd14610191578063313ce567146101c15780634ada218b146101df57806370a08231146101fd578063715018a61461022d57610116565b806306fdde031461011b578063095ea7b31461013957806317700f011461016957806318160ddd14610173575b600080fd5b610123610375565b60405161013091906113fe565b60405180910390f35b610153600480360381019061014e919061120b565b610407565b60405161016091906113e3565b60405180910390f35b610171610507565b005b61017b61056a565b6040516101889190611480565b60405180910390f35b6101ab60048036038101906101a691906111bc565b610574565b6040516101b891906113e3565b60405180910390f35b6101c96109bb565b6040516101d6919061149b565b60405180910390f35b6101e76109d2565b6040516101f491906113e3565b60405180910390f35b61021760048036038101906102129190611157565b6109e5565b6040516102249190611480565b60405180910390f35b610235610a2e565b005b61023f610b34565b005b610249610b97565b60405161025691906113c8565b60405180910390f35b610267610bc0565b60405161027491906113fe565b60405180910390f35b6102976004803603810190610292919061120b565b610c52565b6040516102a491906113e3565b60405180910390f35b6102c760048036038101906102c29190611157565b610f54565b005b6102e360048036038101906102de9190611180565b610fe0565b6040516102f09190611480565b60405180910390f35b610313600480360381019061030e9190611157565b611067565b6040516103209190611480565b60405180910390f35b610343600480360381019061033e919061120b565b61107f565b005b61035f600480360381019061035a9190611157565b61110d565b60405161036c9190611480565b60405180910390f35b606060058054610384906115e4565b80601f01602080910402602001604051908101604052809291908181526020018280546103b0906115e4565b80156103fd5780601f106103d2576101008083540402835291602001916103fd565b820191906000526020600020905b8154815290600101906020018083116103e057829003601f168201915b5050505050905090565b60008160026000610416611125565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff166104b0611125565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104f59190611480565b60405180910390a36001905092915050565b61050f611125565b73ffffffffffffffffffffffffffffffffffffffff1661052d610b97565b73ffffffffffffffffffffffffffffffffffffffff161461054d57600080fd5b6000600960006101000a81548160ff021916908315150217905550565b6000600854905090565b600083826000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610653578082600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461061191906114d2565b1115610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064990611460565b60405180910390fd5b5b600960009054906101000a900460ff16806106a75750610671611125565b73ffffffffffffffffffffffffffffffffffffffff1661068f610b97565b73ffffffffffffffffffffffffffffffffffffffff16145b6106e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dd90611440565b60405180910390fd5b84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610730611125565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390611420565b60405180910390fd5b84600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107fb9190611528565b9250508190555084600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461085191906114d2565b9250508190555084600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108a791906114d2565b9250508190555084600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108f8611125565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109419190611528565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516109a59190611480565b60405180910390a3600193505050509392505050565b6000600760009054906101000a900460ff16905090565b600960009054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a36611125565b73ffffffffffffffffffffffffffffffffffffffff16610a54610b97565b73ffffffffffffffffffffffffffffffffffffffff1614610a7457600080fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b3c611125565b73ffffffffffffffffffffffffffffffffffffffff16610b5a610b97565b73ffffffffffffffffffffffffffffffffffffffff1614610b7a57600080fd5b6001600960006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610bcf906115e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfb906115e4565b8015610c485780601f10610c1d57610100808354040283529160200191610c48565b820191906000526020600020905b815481529060010190602001808311610c2b57829003601f168201915b5050505050905090565b6000610c5c611125565b826000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610d38578082600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cf691906114d2565b1115610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90611460565b60405180910390fd5b5b600960009054906101000a900460ff1680610d8c5750610d56611125565b73ffffffffffffffffffffffffffffffffffffffff16610d74610b97565b73ffffffffffffffffffffffffffffffffffffffff16145b610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290611440565b60405180910390fd5b8460016000610dd8611125565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e219190611528565b9250508190555084600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e7791906114d2565b925050819055508460046000610e8b611125565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ed491906114d2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff16610efa611125565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051610f3f9190611480565b60405180910390a36001935050505092915050565b610f5c611125565b73ffffffffffffffffffffffffffffffffffffffff16610f7a610b97565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a57600080fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60046020528060005260406000206000915090505481565b611087611125565b73ffffffffffffffffffffffffffffffffffffffff166110a5610b97565b73ffffffffffffffffffffffffffffffffffffffff16146110c557600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60036020528060005260406000206000915090505481565b600033905090565b60008135905061113c81611685565b92915050565b6000813590506111518161169c565b92915050565b60006020828403121561116957600080fd5b60006111778482850161112d565b91505092915050565b6000806040838503121561119357600080fd5b60006111a18582860161112d565b92505060206111b28582860161112d565b9150509250929050565b6000806000606084860312156111d157600080fd5b60006111df8682870161112d565b93505060206111f08682870161112d565b925050604061120186828701611142565b9150509250925092565b6000806040838503121561121e57600080fd5b600061122c8582860161112d565b925050602061123d85828601611142565b9150509250929050565b6112508161155c565b82525050565b61125f8161156e565b82525050565b6000611270826114b6565b61127a81856114c1565b935061128a8185602086016115b1565b61129381611674565b840191505092915050565b60006112ab6021836114c1565b91507f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6360008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006113116013836114c1565b91507f54726164696e672069732064697361626c6564000000000000000000000000006000830152602082019050919050565b60006113516030836114c1565b91507f546f74616c207472616e7366657220616d6f756e74206578636565647320746860008301527f6520736574206c65696d69726e747474000000000000000000000000000000006020830152604082019050919050565b6113b38161159a565b82525050565b6113c2816115a4565b82525050565b60006020820190506113dd6000830184611247565b92915050565b60006020820190506113f86000830184611256565b92915050565b600060208201905081810360008301526114188184611265565b905092915050565b600060208201905081810360008301526114398161129e565b9050919050565b6000602082019050818103600083015261145981611304565b9050919050565b6000602082019050818103600083015261147981611344565b9050919050565b600060208201905061149560008301846113aa565b92915050565b60006020820190506114b060008301846113b9565b92915050565b600081519050919050565b600082825260208201905092915050565b60006114dd8261159a565b91506114e88361159a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561151d5761151c611616565b5b828201905092915050565b60006115338261159a565b915061153e8361159a565b92508282101561155157611550611616565b5b828203905092915050565b60006115678261157a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156115cf5780820151818401526020810190506115b4565b838111156115de576000848401525b50505050565b600060028204905060018216806115fc57607f821691505b602082108114156116105761160f611645565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61168e8161155c565b811461169957600080fd5b50565b6116a58161159a565b81146116b057600080fd5b5056fea2646970667358221220083d6564ef649692dca3129f4ae067918dfe0efa6ee8f40aa76891cb7b9b23ee64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000001896402000000000000000000000000000000000000000000000000000000000000000005504550454900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055045504549000000000000000000000000000000000000000000000000000000